import { Inject, Provide } from '@midwayjs/core';
import { Context } from '@midwayjs/koa';
import { HttpService } from '@midwayjs/axios';
import { ListStoreDTO } from "@dto/store/store.dto";
import { resBuild } from "@utils/resBuild";

@Provide()
export class StoreService {
  @Inject()
  ctx: Context;

  @Inject()
  httpService: HttpService;

  // 外部API配置
  private readonly EXTERNAL_API_URL = 'https://cmyd.jiwusiwei.com/inre/index.php/base/bssh/see_page';
  private readonly EXTERNAL_API_SIGN = 'c7d46abc31856f0472a7fe9e09eaa085';

  // 列表查询
  async list(queryParams: ListStoreDTO) {
    try {
      // 若未显式指定zbh，根据常见区域名做一次映射（可按需扩展）
      const regionCodeMap: Record<string, string> = {
        '上海': '101',
      };

      // 构造请求参数
      const params = new URLSearchParams();
      params.append('page', String(queryParams.pageNum || 1));
      params.append('rows', String(queryParams.pageSize || 20));
      
      // 合并搜索条件到s参数中
      let searchText = queryParams.s || '';
      if (queryParams.brand) {
        searchText += (searchText ? ' ' : '') + queryParams.brand;
      }
      if (queryParams.bh) {
        searchText += (searchText ? ' ' : '') + queryParams.bh;
      }
      if (queryParams.mc) {
        searchText += (searchText ? ' ' : '') + queryParams.mc;
      }
      // qymc作为展示文案，不再混入s，避免服务器端模糊搜索干扰
      
      params.append('s', searchText);
      // zbh优先，其次根据qymc映射
      const zbh = queryParams.zbh || (queryParams.qymc ? regionCodeMap[queryParams.qymc] : '');
      params.append('zbh', zbh || '');

      // 调用外部API
      const response = await this.httpService.post(
        `${this.EXTERNAL_API_URL}?sign=${this.EXTERNAL_API_SIGN}`,
        params.toString(),
        {
          headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
            'Accept': 'application/json, text/plain, */*'
          }
        }
      );

      // 处理响应数据
      if (response.data && response.data.ok) {
        // 转换数据格式，将外部API的data字段映射为rows
        let rows = response.data.data || [];
        const total = response.data.total || 0;
        
        // 处理ext字段（JSON字符串）
        rows = rows.map((item: any) => {
          if (item.ext && typeof item.ext === 'string') {
            try {
              const extData = JSON.parse(item.ext);
              // 合并ext中的数据到item中
              return { ...item, ...extData };
            } catch (e) {
              // 如果解析失败，返回原数据
              return item;
            }
          }
          return item;
        });
        
        return resBuild.list(rows, total);
      } else {
        return resBuild.fail('获取门店列表失败', 500);
      }
    } catch (error) {
      console.error('调用外部门店API失败:', error);
      return resBuild.fail('调用外部门店API失败', 500);
    }
  }
}

